// 社区成员管理组件
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    communityId: {
      type: Number,
      value: 0,
      observer: function(newVal) {
        // 当社区ID变化时，检查用户是否已加入该社区
        if (newVal > 0) {
          this.checkUserStatus();
        }
      }
    },
    userId: {
      type: Number,
      value: 0
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    isJoined: false,
    isLoading: false,
    buttonText: '加入',
    isLoggedIn: false
  },

  /**
   * 组件生命周期
   */
  lifetimes: {
    attached: function() {
      // 检查用户登录状态
      this.checkLoginStatus();
      // 如果已有社区ID，检查用户是否已加入该社区
      if (this.data.communityId > 0) {
        this.checkUserStatus();
      }
    }
  },

  /**
   * 组件的方法列表
   */
  methods: {
    /**
     * 检查用户登录状态
     */
    checkLoginStatus: function() {
      // 这里应该从本地存储或全局状态中获取用户登录信息
      const userId = wx.getStorageSync('userId');
      const isLoggedIn = !!userId;
      
      if (isLoggedIn && !this.data.userId) {
        this.setData({
          userId: parseInt(userId),
          isLoggedIn: true
        });
      } else {
        this.setData({
          isLoggedIn: isLoggedIn
        });
      }
    },

    /**
     * 检查用户是否已加入社区
     */
    checkUserStatus: function() {
      if (!this.data.isLoggedIn || !this.data.communityId) {
        return;
      }

      this.setData({
        isLoading: true
      });

      // 调用后端接口检查用户是否已加入社区
      wx.request({
        url: `http://localhost:8080/api/community/${this.data.communityId}/check`,
        data: {
          userId: this.data.userId
        },
        success: (res) => {
          if (res.data && res.data.success) {
            this.setData({
              isJoined: res.data.data,
              buttonText: res.data.data ? '已加入' : '加入'
            });
          }
        },
        fail: (err) => {
          console.error('检查用户社区状态失败:', err);
        },
        complete: () => {
          this.setData({
            isLoading: false
          });
        }
      });
    },

    /**
     * 处理按钮点击事件
     */
    onButtonClick: function() {
      // 检查登录状态
      if (!this.data.isLoggedIn) {
        wx.showModal({
          title: '提示',
          content: '请先登录',
          showCancel: true,
          cancelText: '取消',
          confirmText: '去登录',
          success: (res) => {
            if (res.confirm) {
              // 跳转到登录页面
              wx.navigateTo({
                url: '/pages/login/login'
              });
            }
          }
        });
        return;
      }

      // 如果已加入，则退出社区；否则加入社区
      if (this.data.isJoined) {
        this.confirmLeaveCommunity();
      } else {
        this.joinCommunity();
      }
    },

    /**
     * 加入社区
     */
    joinCommunity: function() {
      if (this.data.isLoading) return;

      this.setData({
        isLoading: true
      });

      // 调用加入社区接口
      wx.request({
        url: `http://localhost:8080/api/communities/${this.data.communityId}/members`,
        method: 'POST',
        data: {
          userId: this.data.userId
        },
        success: (res) => {
          // 处理不同HTTP状态码的情况
          if (res.statusCode === 401) {
            wx.showModal({
              title: '提示',
              content: '登录已失效，请重新登录',
              showCancel: false,
              success: () => {
                wx.navigateTo({ url: '/pages/login/login' });
              }
            });
            return;
          } else if (res.statusCode === 403) {
            wx.showToast({
              title: '您无法加入该社区',
              icon: 'none',
              duration: 2000
            });
            return;
          } else if (res.statusCode === 404) {
            wx.showToast({
              title: '社区不存在',
              icon: 'none',
              duration: 2000
            });
            return;
          } else if (res.statusCode === 409) {
            wx.showToast({
              title: '您已在该社区中',
              icon: 'none',
              duration: 2000
            });
            this.setData({
              isJoined: true,
              buttonText: '已加入'
            });
            return;
          } else if (res.statusCode === 500) {
            wx.showToast({
              title: '操作失败，请重试',
              icon: 'none',
              duration: 2000
            });
            return;
          }

          // 处理正常的API响应
          if (res.data && res.data.success) {
            wx.showToast({
              title: '加入成功',
              icon: 'success',
              duration: 2000
            });
            this.setData({
              isJoined: true,
              buttonText: '已加入'
            });
            // 触发自定义事件，通知父组件状态变化
            this.triggerEvent('statusChange', { isJoined: true });
          } else {
            wx.showToast({
              title: res.data.message || '加入失败',
              icon: 'none',
              duration: 2000
            });
          }
        },
        fail: (err) => {
          console.error('加入社区失败:', err);
          wx.showToast({
            title: '可能由于网络原因暂时无法连接到服务器，请检查网络连接',
            icon: 'none',
            duration: 3000
          });
        },
        complete: () => {
          this.setData({
            isLoading: false
          });
        }
      });
    },

    /**
     * 确认退出社区
     */
    confirmLeaveCommunity: function() {
      wx.showModal({
        title: '确认退出',
        content: '确定要退出该社区吗？',
        showCancel: true,
        cancelText: '取消',
        confirmText: '确定',
        success: (res) => {
          if (res.confirm) {
            this.leaveCommunity();
          }
        }
      });
    },

    /**
     * 退出社区
     */
    leaveCommunity: function() {
      if (this.data.isLoading) return;

      this.setData({
        isLoading: true
      });

      // 调用退出社区接口
      wx.request({
        url: `http://localhost:8080/api/communities/${this.data.communityId}/members/me`,
        method: 'DELETE',
        data: {
          userId: this.data.userId
        },
        success: (res) => {
          // 处理不同HTTP状态码的情况
          if (res.statusCode === 401) {
            wx.showModal({
              title: '提示',
              content: '登录已失效，请重新登录',
              showCancel: false,
              success: () => {
                wx.navigateTo({ url: '/pages/login/login' });
              }
            });
            return;
          } else if (res.statusCode === 403) {
            wx.showToast({
              title: '您无法退出该社区',
              icon: 'none',
              duration: 2000
            });
            return;
          } else if (res.statusCode === 404) {
            wx.showToast({
              title: '社区不存在',
              icon: 'none',
              duration: 2000
            });
            return;
          } else if (res.statusCode === 409) {
            wx.showToast({
              title: '您尚未加入该社区',
              icon: 'none',
              duration: 2000
            });
            this.setData({
              isJoined: false,
              buttonText: '加入'
            });
            return;
          } else if (res.statusCode === 500) {
            wx.showToast({
              title: '操作失败，请重试',
              icon: 'none',
              duration: 2000
            });
            return;
          }

          // 处理正常的API响应
          if (res.data && res.data.success) {
            wx.showToast({
              title: '退出成功',
              icon: 'success',
              duration: 2000
            });
            this.setData({
              isJoined: false,
              buttonText: '加入'
            });
            // 触发自定义事件，通知父组件状态变化
            this.triggerEvent('statusChange', { isJoined: false });
          } else {
            wx.showToast({
              title: res.data.message || '退出失败',
              icon: 'none',
              duration: 2000
            });
          }
        },
        fail: (err) => {
          console.error('退出社区失败:', err);
          wx.showToast({
            title: '可能由于网络原因暂时无法连接到服务器，请检查网络连接',
            icon: 'none',
            duration: 3000
          });
        },
        complete: () => {
          this.setData({
            isLoading: false
          });
        }
      });
    }
  }
});